package com.suntianci.stock.mapper;

import com.suntianci.stock.pojo.domain.*;
import com.suntianci.stock.pojo.entity.StockRtInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author 孙天赐
 * @description 针对表【stock_rt_info(个股详情信息表)】的数据库操作Mapper
 * @createDate 2024-12-24 15:39:27
 * @Entity com.suntianci.stock.pojo.entity.StockRtInfo
 */
public interface StockRtInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockRtInfo record);

    int insertSelective(StockRtInfo record);

    StockRtInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockRtInfo record);

    int updateByPrimaryKey(StockRtInfo record);

    /**
     * 分页查询最新股票数据
     *
     * @return
     */
    List<StockUpDownDomain> getStockInfo(Date lastDate);

    /**
     * 查询涨幅最高前4条股票数据
     *
     * @param lastDate
     * @return
     */
    List<StockUpDownDomain> getBestStockInfo(Date lastDate);

    /**
     * 查询最新交易日内的涨跌停数量
     * 报错是因为插件的误判问题，实际上可以正常运行
     * 注意：1.可以省略Map的泛型，但不能省略List的泛型（也就是说必须要有Map）
     *       2.sql语句中的resultType为Map，而不是List
     * @param startDate
     * @param endDate
     * @param operation 0：获取跌停信息  1：获取涨停信息
     * @return
     */
    List<Map<String, Object>> getStockUpDownCount(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("operation") int operation);

    /**
     * 统计个股（A股）在指定时间的涨跌幅度（根据涨跌幅划分区间）
     * @param date
     * @return
     */
    List<Map> getstockTimeSharingUpDown(Date date);

    /**
     * 获取指定时间范围内的个股数据
     * @param openDate
     * @param endDate
     * @param stockCode
     * @return
     */
    List<Stock4MinuteDomain> getstockInfoInEveryMinute(@Param("openDate") Date openDate, @Param("endDate") Date endDate, @Param("stockCode") String stockCode);

    /**
     * 获取指定时间范围内的每日最终交易时间
     * @param startDate
     * @param endDate
     * @param stockCode
     * @return
     */
    List<Date> getEveryDayLastTime(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("stockCode") String stockCode);

    /**
     * 获取指定时间点的个股数据
     * @param timeList
     * @param stockCode
     * @return
     */
    List<Stock4EveryDayDomain> getStockDayKLine( @Param("timeList") List<Date> timeList, @Param("stockCode") String stockCode);

    /**
     *  批量插入股票数据
     * @param stockList
     * @return
     */
    int batchInsert(@Param("stockList") List<StockRtInfo> stockList);

    /**
     * 划分时间，获取每周的起始时间和终止时间
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Date>> getEveryWeekStartAndEndTime(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("stockCode") String stockCode);

    /**
     * 根据每周时间范围，查询每周的数据
     *
     * @param startDate
     * @param endDate
     * @param stockCode
     * @return
     */
    Stock4EveryWeekDomain getStockWeekLine(@Param("startDate") Date startDate, @Param("endDate") Date endDate , @Param("stockCode") String stockCode);

    /**
     * 获取个股最新分时行情数据
     * @param stockCode
     * @param date
     * @return
     */
    StockRtDomain getStockRtInfo(@Param("stockCode") String stockCode, @Param("date") Date date);

    /**
     * 获取个股最新交易流水行情数据，取最新的前十条
     * @param stockCode
     * @return
     */
    List<SrockRtTransactionFlowDomain> getSrockRtTransactionFlowInfo(String stockCode);
}
